package org.springframework.batch.item.resource;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.batch.test.SimpleResourceAwareItemStream;
import org.springframework.core.io.ClassPathResource;
import java.util.Comparator;
/**
* @author Almex
*/
public class SimpleResourceItemSearchTest {
public static final int EXPECTED_INDEX = 10;
private SimpleResourceItemSearch<String> itemSearch;
@Before
public void setUp() throws Exception {
itemSearch = new SimpleResourceItemSearch<>();
}
/**
* We expect to find the item and we get the expected index.
*/
@Test
public void testIndexOfFound() throws Exception {
itemSearch.setReader(new AbstractIndexedResourceAccessibleItemStreamReader<String>() {
@Override
public String read() throws Exception {
return "foo";
}
@Override
public int getCurrentIndex() {
return EXPECTED_INDEX;
}
});
int index = itemSearch.indexOf("foo", new ClassPathResource("./"));
Assert.assertEquals(EXPECTED_INDEX, index);
}
/**
* We expect to not find the item and we get a EOF index.
*/
@Test
public void testIndexOfNotFound() throws Exception {
itemSearch.setReader(new AbstractIndexedResourceAccessibleItemStreamReader<String>() {
private boolean notEOF = false;
@Override
public String read() throws Exception {
return notEOF ? "foo" : null;
}
@Override
public int getCurrentIndex() {
notEOF = false;
return EXPECTED_INDEX;
}
});
int index = itemSearch.indexOf("bar", new ClassPathResource("./"));
Assert.assertEquals(ResourceItemSearch.EOF, index);
}
/**
* We expect that if we change the comparator we can change the default comparison.
*/
@Test
public void testIndexOfSpecificComparator() throws Exception {
itemSearch.setComparator(Comparator.comparing(s -> "bar")); // return for everything "bar"
itemSearch.setReader(new AbstractIndexedResourceAccessibleItemStreamReader<String>() {
@Override
public String read() throws Exception {
return "foo";
}
@Override
public int getCurrentIndex() {
return EXPECTED_INDEX;
}
});
int index = itemSearch.indexOf("bar", new ClassPathResource("./"));
Assert.assertEquals(EXPECTED_INDEX, index);
}
private abstract static class AbstractIndexedResourceAccessibleItemStreamReader<T>
extends SimpleResourceAwareItemStream
implements IndexedResourceAwareItemStreamReader<T> {
}
}